perm filename UDPNEW.FAI[MUS,LCS] blob
sn#088114 filedate 1974-02-21 generic text, type T, neo UTF8
00100 TITLE UDPLA ; WITH SPACEWAR, OCT. 1970.
00200
00300 ; ROUTINE TO READ THE OUTPUT FROM THE MUSIC
00400 ; PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
00500 ;
00600 ; READS FROM UDP DATA WRITTEN WITH 'CONVRT', THE FIRST RECORD OF WHICH
00700 ; CONTAINS THE NUMBER OF WORDS OF DATA IN THE ENTIRE DISK FILE.
00800 ; IF 'BLKS' IS CHANGED, ALSO CHANGE IT IN 'CONVRT'.
00900
01000 A ← 1 ;WORK
01100 B ← 2 ;WORK
01200 RET ← 3 ;RETURN ACCUMULATOR
01300
01400 ;** CHANGE NEXT TO 14 FOR 'UDPBIG' (TO PLAY AT HIGH SRATES-DOUBLES CORE)
01500 BLKS ← =14
01600
01700 ;**** 1312 IS FOR 2314 DSK. CHANGE NUMBER IF NEEDED FOR 3330 DSK. *****
01800 BUFSIZ ←(=128*=18+=32)*BLKS
01900
02000 ↓DSKCHN ←1 ;DISK CHANNEL FOR INPUT
02100 ↓ADCHN ←2 ;D-A CHANNEL FOR OUTPUT
02200
02300 OPDEF READCH [51B8]
02400 OPDEF MESSAGE[51B8!3B12]
02500
02600 BEG: CALLI 0,0 ;RESET I/O DEVICES
02700 OPEN DSKCHN,[17 ;MODE
02800 'UDP ' ;DEVICE NAME
02900 0] ;NO BUFFER HEADERS
03000 HALT BEG ;RESTART IF DEVICE IS UNAVAILABLE
03100 ENTER DSKCHN,[0
03200 0
03300 0
03400 0]
03500 HALT BEG ;FOR NEW UDP CODE
03600
03700 ;FIND OUT NUMBER OF CHANNELS AND
03800 ;THE SPEED.
03900
04000 MESSAGE [ASCIZ/HOW MANY CHANNELS? /]
04100 READCH A
04200 SUBI A,"0"+1 ;CONVERT TO BINR AND ADD 1
04300 DPB A,[POINT 2,OUTBIT,26]
04400
04500 MESSAGE [ASCIZ/ WHAT IS THE SPEED? /]
04600 READCH A
04700 SUBI A,"0"
04800 DPB A,[POINT 3,OUTBIT,32]
04900
05000 LX: MESSAGE [ASCIZ/
05100 TYPE `P' TO PLAY.
05200 /]
05300 readch a
05400 caie a,"P"
05500 jrst lx
05600 MOVEI A,1
05700 MOVEM A,BLKNUM
05800 PLA2: SPCWAR 17,[CALLI]
05900 MESSAGE [ASCIZ/ GO? /]
06000 READCH A
06010 XOPEN: MOVSI 'XGP' ;DOWN TO XGPOK FOR XGP CONFLICT.
06020 DEVUSE 0,
06030 HLRZ 0,0
06040 CAIN 400000
06050 JRST XGPOK
06060 INIT 16,17
06070 SIXBIT .XGP.
06080 0
06090 JRA 16,2(16)
06100 XGPOK: OPEN ADCHN,[117 ;MODE
06200 'AD ' ;DEVICE NAME
06300 0] ;NO BUFFER HEADERS
06400
06500 JRST [MESSAGE[ASCIZ/
06600 ***D-A NOT AVAILABLE/]
06700 CALLI 12]
06800 ;EXIT IF D-A IS UNAVAILABLE
06900
07000
07100 INPUT DSKCHN,[IOWD 1,NWD
07200 0 ]
07300
07400 ; -----------------------------------------
07500
07600 ;BEGIN MAIN BODY OF PROGRAM
07700
07800 LOOP: JSP RET,SUB ;ROUTINE TO READ AND WRITE
07900 BUF1-1 ;USE BUF1 FOR THE I/O
08000 JUMPLE B,OUT ;DONE
08100
08200 JSP RET,SUB ;CALL IT AGAIN
08300 BUF2-1 ;USE BUF2 FOR THE I/O
08400 JUMPG B,LOOP ;GO BACK FOR MORE IF B>0
08500
08600 OUT: close dskchn, ;END OF PROGRAM.
08700 releas adchn,
08800 SPCWAR 0,'SSW'
08810 RELEASE 16,
08900 jrst lx
09000
09100 ;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
09200 ; 1(RET) WILL BE THE RETURN
09300 ; 0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
09400 ; PUT IN THE RIGHT HALF OF THE IOWD.
09500 ; A WILL BE A WORK REGISTER
09600 ; B WILL BE TESTED ON THE OUTSIDE.
09700
09800 SUB: MOVNI A,BUFSIZ ;PICK UP AND COMPLEMENT BUFSIZ
09900 ADDB A,NWD ;A←NWD-BUFSIZ
10000 ;NWD←NWD-BUFSIZ
10100 MOVE B,A ;SAVE B TO BE TESTED FOR LAST
10200 ;TIME.
10300 JUMPLE A,LAST ;SET UP FOR LAST TIME.
10400 MOVEI A,0
10500
10600 ;THE IOWD LOOKS LIKE:
10700 ; [-BUFSIZ / BUFI-1]
10800
10900 LAST: ADDI A,BUFSIZ
11000 MOVNS A ;COMPLEMENT A
11100 HRL A,0(RET) ;PICK UP BUFI AND MOVE IT
11200 ;TO THE LEFT SIDE OF A.
11300 MOVSM A,INLIST ;SWAP A AND MOVE IT.
11400 MOVSM A,OUTWC ;SAME FOR OUTPUT.
11500 INPUT DSKCHN,INLIST ;READ A RECORD.
11600 MOVEI A,BLKS
11700 ADDM A,BLKNUM
11800 OUTPUT ADCHN,OUTWC ;WRITE THE RECORD.
11900 JRST 1(RET) ;RETURN
12000
12100 ; -----------------------------------------
12200
12300 ; STORAGE:
12400
12500 NWD: 0 ;FOR NUMBER OF WORDS OF INPUT.
12600 0
12700 ↓BUF1: BLOCK BUFSIZ+1 ;BUFFER 1
12800 BUF2: BLOCK BUFSIZ+1 ;BUFFER 2
12900
13000 CLIST: IOWD 1,NWD ;FOR THE FIRST RECORD
13100 0
13200
13300 INLIST: 0 ;WILL CONTAIN AN IOWD
13400 BLKNUM: 0
13500
13600 OUTWC: 0 ;WILL CONTAIN AN IOWD FOR D-A
13700 3650 ;MAGIC BITS FOR 136.
13800 OUTBIT: 4000 ;BITS FOR D-A
13900 BLOCK 2
14000 end beg